﻿using Seg.Entidades;
using Seg.Logica;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Seg.Componente
{
    public class Autentificar
    {
        public class DTOValidar
        {
            public string Nombre {get;set;}
            public string Usuario {get;set;}
            public string Contra { get; set; }
            public string CodigoUsuarioOficina {get;set;}
            public string CodigoOficina {get;set;}
            public string Oficina {get;set;}
            public string CodigoPerfil {get;set;}
            public string Perfil { get; set; }
            public string CodigoPerdilUsuario { get; set; }
            public string DetallePerfil { get; set; }
            public int result { get; set; }
            public string message { get; set; }
            public string TipoAcceso { get; set; }
            public string UsuarioCorreo { get; set; }
            public string UsuarioLogin { get; set; }
        }

        public DTOValidar Autentificacion(string Usuario, string Contra,string prefijoSist)
        {
            DTOValidar sesion = new DTOValidar();
            try
            {
                Usuario usu = new Usuario();
                usu.UsuarioWindow = Usuario;
                usu.Clave = Contra;

                var usuario = new LoginLogica().validarLogin(usu);

                if (usuario != null)
                {
                    UsuarioOficina oficina = new UsuarioOficina();
                    oficina = new UsuarioOficinaLogica().obtenerUsuOficinaXUsuario(usuario.CodigoUsuario);

                    if (oficina != null)
                    {
                            var perf = new PerfilLogistica().ListaPerfilXSistema(oficina.CodigoUsuarioOficina,prefijoSist);
                            SEGSS_PERFILUSUARIO_X_CODIGO_Result objPerfil = new SEGSS_PERFILUSUARIO_X_CODIGO_Result();
                            if (perf != null && perf.Count>0)
                            {
                                objPerfil = perf[0];

                                //valida si existe asignado el detalle de opciones al usuario
                               var detaPerfil= new PerfilUsuarioOficinaDetalleLogica().obtenerPerfilUsuarioOficinaDetalleXCod(objPerfil.CodigoPerfilUsuarioOfi);
                               if (detaPerfil != null)
                               {
                                   var perfActivos = detaPerfil.Where(x => x.TipoAcceso != "N").ToList();
                                   if (perfActivos.Count > 0)
                                   {
                                       sesion.Nombre = String.Format("{0} {1} {2}", usuario.Nombre, usuario.Paterno, usuario.Materno);
                                       sesion.CodigoUsuarioOficina = Convert.ToString(oficina.CodigoUsuarioOficina);
                                       sesion.CodigoOficina = Convert.ToString(oficina.CodigoOficina);
                                       sesion.Oficina = objPerfil.NombreOficina;
                                       sesion.CodigoPerfil = Convert.ToString(objPerfil.CodigoPerfil);
                                       sesion.Perfil = objPerfil.NombrePerfil;
                                       sesion.CodigoPerdilUsuario = Convert.ToString(objPerfil.CodigoPerfilUsuarioOfi);
                                       sesion.Usuario = usuario.UsuarioWindow;
                                       sesion.UsuarioLogin = usuario.UsuarioWindow;
                                       sesion.UsuarioCorreo = usuario.CorreoElectronico;
                                       
                                       sesion.result = 1;
                                   }
                                   else {
                                       sesion.result = 0;
                                       sesion.message = "*El Usuario no tiene opciones activadas.";
                                   }
                               }
                               else {

                                   sesion.result = 0;
                                   sesion.message = "*El Usuario no tiene opciones activadas..";
                               }

                            }
                            else
                            {
                                sesion.result = 0;
                                sesion.message = "*El Usuario no tiene asignado ningun perfil.";
                            }
                    }
                    else
                    {
                        sesion.result = 0;
                        sesion.message = "*El Usuario no tiene Configurado una Oficina.";
                    }
                }
                else
                {
                    sesion.result = 0;
                    sesion.message = "*Login Incorecto";
                }
            }
            catch (Exception ex)
            {
                sesion.result = 0;
                sesion.message = ex.Message;
            }
            return sesion;
        }
        public DTOValidar obtenerModoDeAcceso(int CodigoPerfilUsuario, int CodigoOpcion)
        {
            DTOValidar obj = new DTOValidar();
            try
            {
                var detalle = new PerfilUsuarioOficinaDetalleLogica().obtenerDetalle(CodigoPerfilUsuario, CodigoOpcion);

                if (detalle != null)
                {
                    obj.TipoAcceso = detalle.TipoAcceso;
                    obj.result = 1;
                }
                else
                {
                    obj.result = 0;
                    obj.message = "Error";
                }
            }
            catch (Exception ex)
            {
                obj.result = 0;
                obj.message = ex.Message;
            }
            return obj;
        }
    }
}
